package top.tangyh.lamp.care.service;

import org.springframework.web.bind.annotation.RequestBody;
import top.tangyh.basic.base.service.SuperService;
import top.tangyh.lamp.care.entity.BObsvRecord;
import top.tangyh.lamp.care.vo.query.*;
import top.tangyh.lamp.care.vo.result.*;
import top.tangyh.lamp.care.vo.save.BObsvRecordSaveVO;
import top.tangyh.lamp.care.vo.update.BObsvRecordUpdateVO;

import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 * <p>
 * 业务接口
 * 观察项记录表
 * </p>
 *
 * @author zqb
 * @date 2024-07-24 15:47:49
 * @create [2024-07-24 15:47:49] [zqb] [代码生成器生成]
 */
public interface BObsvRecordService extends SuperService<Long, BObsvRecord> {


    /**
     * 体温单-血压 模块数据
     */
    List<BObsvRecord> getBloodPressureListData(String hospitalNumber, String startTime, String endTime);

    /**
     * 体温单-呼吸 模块数据
     */
    List<BObsvRecord> getTemperatureTOfBreathingListData(String hospitalNumber, String startTime, String endTime);

    /**
     * 直接查询 设备 大数据表 clickhouse里的生命体征数据
     * @param patientIdent
     * @param hospitalNumber
     * @param startTime
     * @param endTime
     * @return
     */
    Map<String, List<BObsvRecord>> getDevTwdObsvRecord(String patientIdent, String hospitalNumber, Date startTime, Date endTime);

    /**
     * 体温单-体温 模块数据
     */
    List<BObsvRecord> getTemperaListData(String hospitalNumber, Long startTime, Long endTime);

    /**
     * 体温单-大便 模块数据
     */
    List<BObsvRecord> getShitListData(String hospitalNumber, String startTime, String endTime);


    /**
     * 指定班次，或时间段内，是否所有项都有值 ,true--都有值，false 至少有一项没有值
     *
     * @param param 查询参数
     * @return
     */
    boolean hasAllVal(ObsvRecordQueryParam param);


    /**
     * 呼吸机使用天数
     *
     * @param patientIdent    病人识别号
     * @param changeShiftTime 换班时间，时间戳
     * @return
     */
    Integer getUeDaysWithBreathe(String patientIdent, Long changeShiftTime);


    WorkPlanDetailOutVO getShiftTimeSlot(Long currTime, Long shiftId);


    List<BObsvRecordResultVO> queryOld(ObsvRecordQueryParam param);

    /**
     * 为医生查询观察记录
     *
     * @param param 查询参数
     * @return
     */
    List<ObsvRecordDto> queryByDoctor(@Valid ObsvRecordQueryByDoctorParam param);


    /**
     * 新增或保存观察记录
     *
     * @param param 保存参数
     * @return
     */
    Boolean addAndUpdate(BObsvRecordSaveVO param);


    /**
     * 获得天数
     *
     * @param param 查询参数
     * @return
     */
    ObsrvUseDaysDto getDays(ObsrvUseDaysParam param);


    /**
     * 更改观察项记录删除状态
     *
     * @param updateStatusDTO 更改参数
     */
    void updateRecordStatus(UpdateStatusDTO updateStatusDTO);

    /**
     * 删除观察项记录
     *
     * @param param 删除参数
     * @return
     */
    boolean del(@RequestBody @Valid ObsvRecordCodesVO param);

    void deleteData(String patientIdent, String hospitalNumber, LocalDateTime timePoint);


    List<Map> getCktime(String hospitalNumber, String startTimeStr, String endTimeStr);

    List<ObsvRecordDto> careAddAndUpdate(List<CareObsvRecordDto> params, Long recordTime, String operator, String account, String patientIdent, Set<String> codes);


    /**
     * 体温单-脉搏心率 模块数据
     */
    List<BObsvRecord> getPulseHeartRateListData(String hospitalNumber, String startTime, String endTime);


    /**
     * 将采集的clickhouse 生命体征数据插入到观察项
     * @param iotDataList
     * @return
     */
    Boolean IotDataCollectionOfSave(List<IotDataResult> iotDataList);
}


